# 京牌摇号⼩程序
# 需求：
# 1. 允许⽤户最多选3次
# 2. 每次放出20个⻋牌供⽤户选择
# 3. 京[A-Z]-[5位字母和数字的组合]
# 想实现这个程序 ，有2个问题要解决：
# 1. 如果实现输出随机值
# 2. 随机值需限定在⼤写字⺟，和数字范围内，不能有其它特殊字符。
# 这就要⽤到⼀些超纲知识， random模块和string模块。 Python的模块库是个宝藏，想实现任何功能它都有现成的模块供你调⽤。
import random
import string


# 定义函数，随机生成20个京牌号码
def generate_lottery_numbers():
    # 定义列表，存放20个京牌号码
    lottery_numbers = []
    # 定义字符串，存放5位字母和数字的组合
    letters_and_numbers = string.ascii_letters + string.digits
    # 循环20次，生成20个京牌号码
    for i in range(20):
        # 随机选取5位字母和数字的组合
        letters_and_numbers_combination = ''.join(random.sample(letters_and_numbers, 5))
        # 随机选取一个大写字母
        big_letter = random.choice(string.ascii_uppercase)

        # 拼接生成京牌号码
        lottery_number = '京' + big_letter + '-' + letters_and_numbers_combination
        # 将京牌号码添加到列表中
        lottery_numbers.append(lottery_number)

    # 返回20个京牌号码列表
    return lottery_numbers


# 定义函数，输出20个京牌号码
def output_lottery_numbers(lottery_numbers):
    # 循环20次，输出20个京牌号码
    for i in range(20):
        print(lottery_numbers[i])


# 定义函数，用户选择京牌号码

def user_select_lottery_numbers(lottery_numbers):
    # 定义列表，存放用户选择的京牌号码
    user_selected_lottery_numbers = []
    # 定义变量，记录用户选择的次数
    user_selected_times = 0
    # 循环3次，让用户选择京牌号码
    while user_selected_times < 3:
        # 让用户输入选择的京牌号码
        user_input = input("请输入选择的京牌号码（输入q退出）：")
        # 如果用户输入q，则退出程序
        if user_input == 'q':
            break
        # 如果用户输入的京牌号码不在列表中，则提示输入错误，并继续输入
        elif user_input not in lottery_numbers:
            print("输入错误，请重新输入！")
            continue
        # 如果用户输入的京牌号码在列表中，则将该号码添加到列表中，并提示用户选择成功
        else:
            user_selected_lottery_numbers.append(user_input)
            print("选择成功！")
            user_selected_times += 1
    # 返回用户选择的京牌号码列表
    return user_selected_lottery_numbers


# 主函数
def main():
    # 调用函数，生成20个京牌号码
    lottery_numbers = generate_lottery_numbers()
    # 调用函数，输出20个京牌号码
    output_lottery_numbers(lottery_numbers)
    # 调用函数，用户选择京牌号码
    user_selected_lottery_numbers = user_select_lottery_numbers(lottery_numbers)
    # 输出用户选择的京牌号码
    print("用户选择的京牌号码：")
    for i in range(len(user_selected_lottery_numbers)):
        print(user_selected_lottery_numbers[i])


# 调用主函数
main()
